package com.topscore.marketing.promotion.site.activity.coupon.data;

import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import java.time.LocalDateTime;

@Data
@Entity
public class Activity {

    @Id
    private String id;

    /**
     * 活动类型。
     */
    @Enumerated
    private ActivityType type;

    /**
     * 活动编码。
     */
    @Column(length = 50)
    private String code;

    /**
     * 活动名称。
     */
    @Column(length = 100)
    private String name;

    /**
     * 活动品牌。
     */
    private transient Brand brand;

    /**
     * 参加活动的时间类型。
     */
    @Enumerated
    private TimeType timeType;

    /**
     * 店铺扣率。
     */
    private Double deductPoint;

    /**
     * 是否备货。
     */
    private Boolean prepared;

    /**
     * 活动开始时间。
     */
    private LocalDateTime startTime;

    /**
     * 活动结束时间。
     */
    private LocalDateTime endTime;

    /**
     * 卡券推送方式。
     */
    @Enumerated
    private PushType pushType;

    /**
     * 卡券每人领取上限（张）。
     */
    private Integer pullLimit;

    /**
     * 促销类型。
     */
    @Enumerated
    private PromotionType promotionType = PromotionType.GIFT_ONE;

    /**
     * 商品参与方式。
     */
    @Enumerated
    private ParticipationMode participationMode;

    /**
     * 备注。
     */
    private String comment;

    @Enumerated
    private ActivityType activityType;

    @Enumerated
    private Deleted deleted;

    private Creator creator;

    /**
     * 活动规则。
     * @author dengb
     */
    @Data
    @Entity(name = "activity_rule")
    public static class Rule {
        @Id
        private Long id;

        /**
         * 区间下限。
         */
        private Double lowerLimit;

        /**
         * 区间上限。
         */
        private Double upperLimit;

        /**
         * 加金额。
         */
        private Double raisePrice;

        /**
         * 赠送类型。<br/>
         * 是否连续赠送。
         * @see GivenType#CONTINUOUS 连续计算
         * @see GivenType#EXCLUSIVE 不连续计算
         */
        private GivenType givenType;

        public static class Gift {

        }
    }
}
